#pragma once
#include <string>
#include "InputState.h"
#include "IGame.h"
class Game;
class IGameScreen
{
public:
	virtual ~IGameScreen() { };
	//Called for the screen to initialize itself
	virtual bool ScreenInit(IGame *pGame) = 0;
	//Called before the screen is removed
	virtual void OnScreenRemoveRequest() = 0;
	//Called after the screen is removed for cleanup
	virtual void OnScreenRemoved() = 0;
	//Called once per frame for updates
	virtual void Update() = 0;
	//Called once per frame for rendering
	virtual void Render() = 0;
	//Gets the internal screen name
	virtual std::string GetInternalName() = 0;
	//Screen Input Handlers
	virtual void OnKeyPress(uint key) = 0;
	//Screen Input Handlers
	virtual void OnKeyRelease(uint key) = 0;

	virtual IGame *GetGame() = 0;
	virtual IRenderer *GetRenderer() = 0;
	virtual IScreenManager *GetScreenManager() = 0;

	/*Properties*/
	virtual bool _bBlockInput() = 0; //Does this screen block input from the screen(s) below it
	virtual bool _bUpdate() = 0; //Does this screen allow being updated
	virtual bool _bAcceptInput() = 0; //Does this screen accept input
	virtual bool _bBlockUpdate() = 0; //DOes this screen block screens below it from being updated
	virtual bool _bDraw() = 0;
};